#ifndef CURVA_H
#define CURVA_H

#include <vector>
#include <Ponto.h>

class Curva
{
    public:
        Curva();
        virtual ~Curva();

        void desenharPoligonal();
        void calculaAreaSelecao();
        bool isInsideBoudary(float x, float y);

        //Implementa na classe filho, de acordo com o tipo de curva
        virtual Ponto* avalia(float u, int indInicio, int indFinal) = 0;
        virtual void desenharCurva() = 0;
        virtual void adPonto(float x, float y) = 0;

        std::vector<Ponto*> GetPontos() { return m_Pontos; }
        int GetGrau() { return m_Grau; }
        void SetGrau(unsigned int val) { m_Grau = val; }
        std::vector<Ponto*> GetAreaSelecao() { return m_AreaSelecao; }
        bool isSelected() { return m_Selected; }

        void deselect() { m_Selected = false; }
        void select() { m_Selected = true; }
        void switchSelect() { m_Selected = !m_Selected; }
    protected:
        void adPontoSelecao(float x, float y);

        bool m_Selected;
        std::vector<Ponto*> m_Pontos;
        int m_Grau;
        std::vector<Ponto*> m_AreaSelecao;
    private:
};

#endif // CURVA_H
